package jinzhi1.binary.binary.lib;


//十进制
public class Dec extends Binary {
    private long dec;
    public Dec(long dec) {
        this.dec=dec;
    }


    /*
    函数：十进制转换二进制
    转换原理：
         获取的数字除2，记余数
         10/2=5.....1;
         5/2=2......1;
         2/2=1......0;
         1/2=0......1;
        从下往上记 二进制为：1010
        所以需要反转
     */
    @Override
   public String toBin() {
        String bin = "100";
        long dec3 = dec;
        StringBuilder str = new StringBuilder();
        // 循环判断余数
        while (dec3>0){
        str.append(dec3%2);
        dec3/= 2;
        }
        //反转
        bin = str.reverse().toString();
        return bin;
    }
    /*
    函数：十进制转换二进制
    原理：十进制等于十进制
     */
    @Override
   public long toDec() {
        return dec;
    }
    /*
      函数：十进制转换八进制
      转换原理：
           获取的数字除8，记余数
           11/8=1.....3;
           倍数+余数;
           八进制为：13
       */
    @Override
   public long toOct() {
        long oct = 0L;
        int power = 1;
        long dec1 = dec;
        // 处理十进制值
        while (dec1 > 0) {
            oct += (dec1 % 8) * power; // 添加当前位(余数)到八进制
            dec1 /= 8; // 删除已处理的位
            power *= 10; // 为下一位增加 10 的幂(八进制使用基数 8)
        }
        return oct;
    }
    /*
      函数：十进制转换16进制
      转换原理：
           获取的数字除16，记余数
           30/16=1.....14;
           倍数+余数;
           余数大于9转换成大写字母A~F;
           16进制为：1E
       */
    @Override
   public String toHex() {
        String hex = "";
        long dec2 = dec;
        while (dec2 > 0) {
            //获取余数
            long yuShu = dec2 % 16;
            //判断余数是否小于10,小于10
            if (yuShu < 10) {
                hex = yuShu + hex;
            }else {
                //大于10
                hex = (char) (yuShu + 55) + hex;
                }
            dec2 = dec2 / 16;
        }
        return hex;
    }
}
